The AT89LP series of 8051 compatible microcontrollers incor- porates a single cycle 8051 core. The execution time for most instructions equals the number of bytes in the instruction. In- structions that perform address calculations take more cycles. Several members of the AT89LP series have enhancements which may include the MAC AB, ASR M, LSL M, and CLR M instructions which manipulate the 40 bit multiply-accumulate register, a secondary dptr register supporting an additional addressing mode to the INC, MOV, MOVC, and MOVX instructions, a new CJNE addressing op- tion, a new jump indirect relative to PC addressing mode, and a BREAK instruction.
PROCESSOR SPECIFIC DIRECTIVES .regbnk Directive Format: .regbnk 0, 1, 2, or 3 The .regbnk directive informs the assembler about which register bank (0-3) is currently being used. This effects instructions like PUSH R0-R7 and POP R0-R7 where the register bank is encoded into the instruction. The AS89LP assembler supports many of the AT89LP microcon- trollers natively. The following table lists the processor directive, the supported processor, and the 'Special Function Register', SFR, file that should be included in a project to define the SFR registers. .lp2052 AT89LP2052 lp2052.sfr .lp213 AT89LP213 lp213.sfr .lp214 AT89LP214 lp214.sfr .lp216 AT89LP216 lp216.sfr .lp3240 AT89LP3240 lp3240.sfr .lp4052 AT89LP4052 lp4052.sfr .lp428 AT89LP428 lp428.sfr .lp51 AT89LP51 lp51.sfr .lp51ed2 AT89LP51ED2 lp51ed2.sfr .lp51ic2 AT89LP51IC2 lp51ic2.sfr .lp51id2 AT89LP51ID2 lp51id2.sfr .lp51rb2 AT89LP51RB2 lp51rb2.sfr .lp51rc2 AT89LP51RC2 lp51rc2.sfr .lp51rd2 AT89LP51RD2 lp51rd2.sfr .lp52 AT89LP52 lp52.sfr .lp6440 AT89LP6440 lp6440.sfr .lp828 AT89LP828 lp828.sfr Including the particular processor sfr file invokes the appropriate processor type directive and defines the SFR values. The .__.CPU. and .__.$$$. Variables The assembler variable .__.CPU. is set to indicate the specific processor selected. The variable .__.$$$. indicates the specific extended instructions supported by the selected processor. The encoding for .__.$$$. is: Bit 0 MAC AB / CLR M / ASR M / LSL M Bit 1 /DPTR modes for INC, MOV, MOVC, and MOVX Bit 2 JMP @A+PC Bit 3 CJNE A,@R0,rel / CJNE A,@R1,rel Bit 4 BREAK .__.CPU. .__.$$$. 43210 .lp2052 AT89LP2052 0 ----- 0x00 .lp213 AT89LP213 1 *-*-- 0x14 .lp214 AT89LP214 2 *-*-- 0x14 .lp216 AT89LP216 3 *-*-- 0x14 .lp3240 AT89LP3240 4 ***** 0x1F .lp4052 AT89LP4052 5 ----- 0x00 .lp428 AT89LP428 6 *---- 0x1E .lp51 AT89LP51 7 -***- 0x0E .lp51ed2 AT89LP51ED2 8 -**** 0x0F .lp51ic2 AT89LP51IC2 9 -**** 0x0F .lp51id2 AT89LP51ID2 10 -**** 0x0F .lp51rb2 AT89LP51RB2 11 -**** 0x0F .lp51rc2 AT89LP51RC2 12 -**** 0x0F .lp51rd2 AT89LP51RD2 13 -**** 0x0F .lp52 AT89LP52 14 -***- 0x0E .lp6440 AT89LP6440 15 ***** 0x1F .lp828 AT89LP828 16 ****- 0x1E The variables '.__.CPU.' and '.__.$$$.' are by default de- fined as local and will not be output to the created .rel file. The assembler command line options -g or -a will not cause the local symbols to be output to the created .rel file. The assembler .globl directive may be used to change the variable type to global causing its definition to be output to the .rel file. The inclusion of the definition of the variables '.__.CPU.' and '.__.$$$.' might be a useful means of validating that separately assembled files have been compiled for the same processor type or have the same instruction extensions. The linker will report an error for variables with multiple non equal definitions.
AT89LP SERIES REGISTER SET The following is a list of the standard 8051 registers used by AS89LP: a,b - 8-bit accumulators r0,r1,r2,r3 - 8-bit registers r4,r5,r6,r7 dptr - data pointer sp - stack pointer pc - program counter psw - status word c - carry (bit in status word) The following is a list of the extended registers used by AS89LP: ab - source register for MAC instruction /dptr - alternate data pointer m - 40-bit multiply-accumulate register
AT89LP SERIES INSTRUCTION SET The following list specifies the format for each addressing mode supported by AS89LP: #data immediate byte or word data r,r1,r2 register r0,r1,r2,r3,r4,r5,r6, or r7 @r indirect on register r0 or r1 @dptr indirect on data pointer @/dptr indirect on alternate data pointer @a+dptr indirect on accumulator plus data pointer @a+/dptr indirect on accumulator plus alternate data pointer @a+pc indirect on accumulator plus program counter addr direct memory address bitnum selected bit /bitnum operation performed with with complement of selected bit label call or jump label The terms data, addr, bitnum, and label may all be expressions. The following tables list all 8051 mnemonics recognized by the AS89LP assembler. Note that not all addressing modes are valid with every instruction. Refer to the AT89 series techni- cal data for valid modes. Inherent Instructions nop Move Instructions mov a,#data mov a,addr mov a,r mov a,@r mov r,#data mov r,addr mov r,a mov addr,a mov addr,#data mov addr,r mov addr,@r mov addr1,addr2 mov bitnum,c mov @r,#data mov @r,addr mov @r,a mov c,bitnum mov dptr,#data movc a,@a+dptr movc a,@a+pc movx a,@dptr movx a,@r movx @dptr,a movx @r,a Single Operand Instructions clr a clr c clr bitnum cpl a cpl c cpl bitnum setb c setb bitnum da a rr a rrc a rl a rlc a swap a dec a dec r dec @r inc a inc r inc dptr inc @r div ab mul ab pop addr push addr Two Operand Instructions add a,#data add a,addr add a,r add a,@r addc a,#data addc a,addr addc a,r addc a,@r subb a,#data subb a,addr subb a,r subb a,@r orl a,#data orl a,addr orl a,r orl a,@r orl addr,a orl addr,#data orl c,bitnum orl c,/bitnum anl a,#data anl a,addr anl a,r anl a,@r anl addr,a anl addr,#data anl c,bitnum anl c,/bitnum xrl a,#data xrl a,addr xrl a,r xrl a,@r xrl addr,a xrl addr,#data xrl c,bitnum xrl c,/bitnum xch a,addr xch a,r xch a,@r xchd a,@r Call and Return Instructions acall label lcall label ret reti in data out data rst data Jump Instructions ajmp label cjne a,#data,label cjne a,addr,label cjne r,#data,label cjne @r,#data,label djnz r,label djnz addr,label jbc bitnum,label jb bitnum,label jnb bitnum,label jc label jnc label jz label jnz label jmp @a+dptr ljmp label sjmp label Extended Instructions mac ab m <- m + (ax,a) * (bx,b) asr m shift m right 1 bit arithmetically lsl m shift m left 1 bit logically clr m clear 40-bit register m cjne a,@r,rel conditional branch if a != @r jmp @a+pc pc <- pc + a inc /dptr increment the alternate dptr mov /dptr,#data load alternate dptr with data movc a,@a+/dptr get code byte relative to alternate dptr movx a,@/dptr mov from external with alternate dptr movx @/dptr,a mov to external with alternate dptr break software break point
THE MACRO LIBRARY The Macro Library is a collection of macros to perform opera- tions involving the multiple address spaces of 8051 type proces- sors. A summary of the macro library is included here. Refer to the file macros.asm for a complete description of the macro functions. Macro Summary ----------------------------------------------------------- Load | B/W | | Source | | Destination | ------- ---------- --------------- .lb_r (R) B IDATA DATA/SFR .lbi_r Indirect (R) B [IDATA] DATA/SFR .lb_rx (R) B XDATA DATA/SFR .lbi_rx Indirect (R) B [XDATA] DATA/SFR .lb_x (X) B XDATA DATA/SFR .lbi_x Indirect (X) B [XDATA] DATA/SFR .lb_c (C) B CODE DATA/SFR ----------------------------------------------------------- Store | B/W | | Source | | Destination | ------- ---------- --------------- .sb_r (R) B DATA/SFR DATA/IDATA .sbi_r Indirect (R) B DATA/SFR DATA/IDATA .sb_rx (R) B DATA/SFR XDATA .sbi_rx Indirect (R) B DATA/SFR XDATA .sb_x (X) B DATA/SFR XDATA .sbi_x Indirect (X) B DATA/SFR XDATA ----------------------------------------------------------- Inc / Dec / Cmp | B/W | | Source | | Destination | ------- ---------- --------------- .incb_rx Increment (R) B XDATA .incb_x Increment (R) B XDATA .decb_rx Decrement (R) B XDATA .decb_x Decrament (R) B XDATA .cmpb_rx Compare (R) B XDATA XDATA .cmpw_rx Compare (R) W XDATA XDATA ----------------------------------------------------------- Move | B/W | | Source | | Destination | ------- ---------- --------------- .mvb_rr 1-Byte (R) B DATA/IDATA DATA/IDATA .mvw_rr 1-Word (R) W DATA/IDATA DATA/IDATA .mvb_xx 1-Byte (X) B XDATA XDATA .mvw_xx 1-Word (X) W XDATA XDATA .mvb_rx 1-Byte (R) B XDATA XDATA .mvw_rx 1-Word (R) W XDATA XDATA .mvb_ix 1-Byte (R) B DATA/IDATA XDATA .mvw_ix 1-Word (R) W DATA/IDATA XDATA .mvb_xi 1-Byte (R) B XDATA DATA/IDATA .mvw_xi 1-Word (R) W XDATA DATA/IDATA ----------------------------------------------------------- Decrement & Jump != 0 | B/W | | Source | | Destination | ------- ---------- --------------- .djnz_rx DJNZ != 0 B XDATA .djnz_x DJNZ != 0 W XDATA ----------------------------------------------------------- Load / Store DPTR | B/W | | Source | | Destination | ------- ---------- --------------- .ldptr W DATA/SFR DPTR .ldptr_r (R) W DATA/IDATA DPTR .ldptr_rx (R) W XDATA DPTR .ldptr_x (X) W XDATA DPTR .sdptr W DPTR DATA/SFR .sdptr_r (R) W DPTR DATA/IDATA .sdptr_rx (R) W DPTR XDATA .sdptr_x (X) W DPTR XDATA ----------------------------------------------------------- Save and Restore Registers .pshreg Push Registers dpl, dph, a, b, r0, r1, r2, r3, r4, r5, r6, and r7 Onto The Stack .popreg Pop Registers r7, r6, r5, r4, r3, r2, r1, r0, b, a, dph, and dpl From The Stack ----*****-----*****-----*****-----*****-----*****-----***** General Macro Argument Nomenclature dst$ - is a destination argumment src$ - is a source argument reg$ - is an optional argument specifying R0 or R1 ppa$ - is a dumby argument which enables pushing and popping the a register ppr$ - is a dumby argument which enables pushing and popping the r register ppx$ - is a dumby argument which enables pushing and popping the dptr/rn register(s) ----*****-----*****-----*****-----*****-----*****-----*****
... Exit the ASxxxx Documentation